wayland: Emit ::direction-changed when appropriate
authorMatthias Clasen <mclasen@redhat.com>
Thu, 4 Apr 2013 03:52:52 +0000 (23:52 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 4 Apr 2013 03:52:52 +0000 (23:52 -0400)
We always emit direction-changed when we get a new keymap, but
for state changes, we compare old and new direction and only
emit the signal when the direction actually changes.

gdk/wayland/gdkdevice-wayland.c

index 74dd5d52f4c13254919cd05c48f730d3ee9270cb..cd7e5e3b6575a8894c34ea1ed282d373c78d751d 100644 (file)
@@ -829,6 +829,7 @@ keyboard_handle_keymap (void               *data,
 
   g_signal_emit_by_name (device->keymap, "keys-changed");
   g_signal_emit_by_name (device->keymap, "state-changed");
+  g_signal_emit_by_name (device->keymap, "direction-changed");
 }
 
 static void
@@ -1122,14 +1123,18 @@ keyboard_handle_modifiers (void               *data,
   GdkWaylandDeviceData *device = data;
   GdkKeymap *keymap;
   struct xkb_state *xkb_state;
+  PangoDirection direction;
 
   keymap = device->keymap;
+  direction = gdk_keymap_get_direction (keymap);
   xkb_state = _gdk_wayland_keymap_get_xkb_state (keymap);
   device->modifiers = mods_depressed | mods_latched | mods_locked;
 
   xkb_state_update_mask (xkb_state, mods_depressed, mods_latched, mods_locked, group, 0, 0);
 
   g_signal_emit_by_name (keymap, "state-changed");
+  if (direction != gdk_keymap_get_direction (keymap))
+    g_signal_emit_by_name (keymap, "direction-changed");
 }
 
 static const struct wl_pointer_listener pointer_listener = {